<?php 

/**
 * Класс-обертка для выполнения запросов к API.
 * Сделан для того, чтобы не менять код во многих местах, 
 * когда API изменится, а также для того, чтобы возвращать 
 * данные в удобном формате и делать предварительные обработки 
 * и проверки ответов.
 */
class VkApi implements ISingleton
{
	/**
	 * @var VkApi
	 */
	private static $_instance;
	
	/**
	 * @return VkApi
	 */
	public static function getInstance()
	{
		if (!self::$_instance) {
			self::$_instance = new self();
		}
	
		return self::$_instance;
	}
	
	/**
	 * Получение одного пользователя.
	 * 
	 * @link http://vk.com/developers.php?oid=-1&p=users.get
	 * @param array $params
	 * @return array
	 */
	public function getUser($params)
	{
		$user = VkClient::getInstance()->api('users.get', $params);
		return current(current($user));
	}
	
	/**
	 * Получает список групп пользователя.
	 * 
	 * @link http://vk.com/developers.php?oid=-1&p=groups.get
	 * @param array $params
	 * @return array
	 */
	public function getGroups($params)
	{
		$groups = VkClient::getInstance()->api('groups.get', $params);
		return current($groups);
	}
	
	/**
	 * Получает информацию о группе по ее vk_id.
	 * Также умеет обрабатывать ссылку на группу.
	 * 
	 * @link http://vk.com/developers.php?oid=-1&p=groups.getById
	 * @param string|integer $gid
	 * @return array
	 */
	public function getGroupById($gid)
	{
		$gid = strtr($gid, array(
				'vk.com' => '',
				'http://' => '',
				'public' => '',
				'club' => ''
		));
		$gid = trim($gid, '/');
		$result = VkClient::getInstance()->api('groups.getById', array('gid' => $gid));
		return current(current($result));
	}
	
	/**
	 * Возвращает список записей со стены пользователя или группы.
	 * 
	 * @link http://vk.com/developers.php?oid=-1&p=wall.get
	 * @param array $params
	 * @return array
	 */
	public function getWallPosts($params)
	{
		$results = VkClient::getInstance()->api('wall.get', $params);
		$results = current($results);
		unset($results[0]);
		
		// Делаем так, чтобы ключами массива были ID постов.
		$posts = array();
		foreach ($results as $post) {
			$posts[ $post['id'] ] = $post;
		}
		
		return $posts;
	}
}